package aiP.A3.Client.Dispatcher;

import aiP.A3.AuftragKomponente.DataAccessLayer.Entity.Angebot;
import aiP.A3.AuftragKomponente.DataAccessLayer.Entity.Auftrag;
import aiP.A3.BuchhaltungKomponente.DataAccessLayer.Entity.Kunde;
import aiP.A3.BuchhaltungKomponente.DataAccessLayer.Entity.Rechnung;
import aiP.A3.BuchhaltungKomponente.DataAccessLayer.Entity.Zahlungseingang;
import aiP.A3.FertigungKomponente.DataAccessLayer.Entity.Bauteil;
import aiP.A3.VersandKomponente.DataAccessLayer.DTO.TransportauftragDTO;
import aiP.A3.VersandKomponente.DataAccessLayer.Entity.Transportauftrag;

import java.io.IOException;
import java.io.Serializable;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * User: Andreas
 * Date: 15.05.14
 * Time: 14:57
 * To change this template use File | Settings | File Templates.
 */

public interface IDispatcher extends Remote, Serializable {

    /**
     * @return gibt eine Map mit den Kundenobjekten Zurück
     */
    public Map<String, Kunde> getKundenMap() throws RemoteException, NotBoundException;

    /**
     * @return
     */
    public Map<String, Bauteil> getBauteilMap() throws RemoteException, NotBoundException;

    /**
     * @return
     */
    public Map<Integer, Kunde> getKundenMapByID() throws RemoteException, NotBoundException;;

    /**
     * @return
     */
    public Map<Integer, Bauteil> getBautei_Id() throws RemoteException, NotBoundException;;

    /**
     * @return
     */
    public Map<Integer, Set<Angebot>> getAngebotMap(Kunde aKunde) throws RemoteException, NotBoundException;


    public Map<Integer, Auftrag> getAuftragsMap() throws RemoteException, NotBoundException;


    public Collection<Angebot> getAngebot(int AngebotID) throws RemoteException, NotBoundException;

    /**
     *
     * @return
     * @throws RemoteException
     * @throws NotBoundException
     */

    public Collection<Angebot> getAllAngebote() throws RemoteException, NotBoundException;


    public Collection<Rechnung> getAllRechnung() throws RemoteException,NotBoundException;

    public void getZahlungseingaengeFromQueue() throws IOException, NotBoundException, InterruptedException;

    public Collection<Zahlungseingang> getAllZahlungseingaenge() throws RemoteException, NotBoundException;


        /**
         * @return
         */
    public void saveAuftrag(Auftrag elem) throws RemoteException, NotBoundException;

    /**
     * @return
     */
    public void saveAngebot(Set<Angebot> elem) throws RemoteException, NotBoundException;

    /**
     * @return
     */
    public void saveRechnung(Rechnung elem) throws RemoteException, NotBoundException;

    public void saveTransport(Transportauftrag auftrag) throws RemoteException, NotBoundException;

    public boolean postToVersanddienstleister(Transportauftrag transportauftrag) throws IOException, NotBoundException;

}
